/*
 * CNode.cpp
 *
 *  Created on: 1 oct. 2009
 *      Author: Jey
 */

#include "Node.h"
#include <iostream>

	// Constructeur avec initialisation de 10 valeurs possible de la node
	Node::Node()
	{
		NodeTempValue = 1;
		SetTempValueFixed(false);
	}

	// Constructeur avec initialisation de la valeur de la node
	Node::Node(int Value)
	{
		NodeTempValue = Value;
		AddValue(Value);
		SetTempValueFixed(true);
	}

	// Initialiser les valeurs possibles de la node
	void Node::InitValues(int NbValue)
	{
		for(int i = 1; i <= NbValue; i++)
			AddValue(i);
	}
	// Destructeur
	Node::~Node(){}

	// Tester si la valeur de la node est fixée (si 1 seule valeur possible)
	bool Node::IsFixed()
	{
		if (NodeValue.size() == 1)
		{
			NodeTempValue = NodeValue.at(0);
			return true;
		}
		return false;
	}

	// Compter le nombre de valeur possible pour la node
	int Node::GetValueCount()
	{
		return NodeValue.size();
	}

	// Récupérer la valeur possible de la node située à index dans le vecteur
	int Node::GetValue(unsigned int Index)
	{
		if (Index >= 0 && Index < NodeValue.size())
			return NodeValue.at(Index);

		std::cout << "Error: GetValue "<< Index <<" forbiden" << std::endl;
		return -1;
	}

	// Récupérer la valeur affectée temporairement à la node
	int Node::GetTempValue()
	{
		if(NodeTempValue != -1)
			return NodeTempValue;

		std::cout << "Error: NodeTempValue=-1" << std::endl;
		return -1;
	}

	// Incrémenter la valeur temporaire de la Node
	void Node::SetTempValue(int NbValue)
	{
		//if(NodeValue.size() > 1)
		if(IsFixed() == false)
		{
			if (NodeTempValue < NbValue)
				NodeTempValue++;
			else
			{
				NodeTempValue = -1;
				std::cout<< "Error: NodeTempValue > 10 NodeTempValue = " << NodeTempValue << std::endl;
			}
		}
		//else
		//	std::cout << "Error: NodeValue.size() = 1" << std::endl;
	}

	// Ajouter des valeurs possibles à la node
	void Node::AddValue(int Value)
	{
		NodeValue.push_back(Value);
	}

	// Supprimer une valeur de la liste des valeur possible de la node
	void Node::RmValue(int Value)
	{
		if(NodeValue.size() >1 )
		{
			for(unsigned int i = 0; i < NodeValue.size(); i++)
				if(NodeValue.at(i) == Value)
					NodeValue.erase(NodeValue.begin() + i);
		}
		else
		{
			std::cout << "Error: NodeValue.size() = 1" << std::endl;
		}

	}

	// Modifier la valeur de TempValueFixed
	void Node::SetTempValueFixed(bool Temp)
	{
		TempValueFixed = Temp;
	}

	// Récupérer la valeur de TempValueFixed
	bool Node::GetTempValueFixed()
	{
		return TempValueFixed;
	}

	// Réinitialise la valeur temporaire d'une node
	void Node::ResetTempValue()
	{
		NodeTempValue = 1;
	}

